package tp2.algocity.modelo;

import java.util.Observable;
import java.lang.reflect.*;

public class ModeloObservable extends Observable {
	
	private Ciudad unaCiudad;
	private Construccion construccion;
	
	public ModeloObservable(int tamanio){
		unaCiudad = new Ciudad("YosuerCity");
		unaCiudad.setArea(tamanio, tamanio);
	}

	public int getModeloDato(Posicion posicion) {
		
		int dato = 0;
		
		if (!unaCiudad.getSuperficie(posicion).ocupado()) {
			if (unaCiudad.getSuperficie(posicion).getDescripcion() == "Agua") dato = 1;
			if (unaCiudad.getSuperficie(posicion).getDescripcion() == "Tierra") {
				if (unaCiudad.getSuperficie(posicion).contieneServicio(new Electricidad())) dato = 7;
				else dato = 2;
			}
		} else {
			if (unaCiudad.getConstruccion(posicion).getTipo() == "Residencial") dato = 3;
			if (unaCiudad.getConstruccion(posicion).getTipo() == "PozoDeAgua") dato = 4;
			if (unaCiudad.getConstruccion(posicion).getTipo() == "CentralElectrica") dato = 5;
			if (unaCiudad.getConstruccion(posicion).getTipo() == "Avenida") dato = 6;
			if (unaCiudad.getConstruccion(posicion).getTipo() == "LineaDeTension") dato = 8;
		}

//		return unaCiudad.getConstruccion(posicion).getClass().getSimpleName();
		return dato;
	}

	public void setModeloDato(Posicion posicion) {
		if (construccion != null) {
			unaCiudad.construir(construccion, posicion);
			setChanged();
	        this.notifyObservers();
		}
	}
	
	public void agregarConstruccion(Posicion posicion){
		if (construccion != null) {
			System.out.println(construccion.getTipo() + " construida en: " + 
									posicion.getPosX() + "," + posicion.getPosY());
			unaCiudad.construir(construccion, posicion);
			setChanged();
	        this.notifyObservers();
		}
	}


	public void selectEdificio(String tipoEdificio) throws Exception {
		
		Class clase = Class.forName("tp2.algocity.modelo."+tipoEdificio);
		construccion = (Construccion) clase.newInstance();
	}
	
}
